home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209b.zip / octave-2.09 / DLFCN.ZIP / dlfcn / examples / hello.cc next >
C/C++ Source or Header  |  1997-05-26  |  3KB  |  100 lines

  1. // hello.cc -- example of a dynamically linked function for Octave.
  2.  
  3. // To use this file, your version of Octave must support dynamic
  4. // linking.  To find out if it does, type the command
  5. //
  6. //   x = octave_config_info; x.DEFS
  7. //
  8. // at the Octave prompt.  Support for dynamic linking is included if
  9. // the output contains the string -DWITH_DYNAMIC_LINKING=1.
  10. //
  11. // To compile this file, type the command
  12. //
  13. //   mkoctfile hello.cc
  14. //
  15. // at the shell prompt.  The script mkoctfile should have been
  16. // installed along with Octave.  Running it will create a file called
  17. // hello.oct that can be loaded by Octave.  To test the hello.oct
  18. // file, start Octave and type the command
  19. //
  20. //   hello ("easy as", 1, 2, 3)
  21. //
  22. // at the Octave prompt.  Octave should respond by printing
  23. //
  24. //   Hello, world!
  25. //   easy as
  26. //   1
  27. //   2
  28. //   3
  29. //   ans = 3
  30.  
  31. // Additional examples are available in the files in the src directory
  32. // of the Octave distribution that use the macro DEFUN_DLD_BUILTIN.
  33. // Currently, this includes the files
  34. //
  35. //   balance.cc   fft2.cc      inv.cc       qzval.cc
  36. //   chol.cc      filter.cc    log.cc       schur.cc
  37. //   colloc.cc    find.cc      lsode.cc     sort.cc 
  38. //   dassl.cc     fsolve.cc    lu.cc        svd.cc
  39. //   det.cc       givens.cc    minmax.cc    syl.cc
  40. //   eig.cc       hess.cc      pinv.cc      
  41. //   expm.cc      ifft.cc      qr.cc     
  42. //   fft.cc       ifft2.cc     quad.cc
  43. //
  44. // The difference between DEFUN_DLD and DEFUN_DLD_BUILTIN is that
  45. // DEFUN_DLD_BUILTIN can define a built-in function that is not
  46. // dynamically loaded if the operating system does not support dynamic
  47. // linking.  To define your own dynamically linked functions you
  48. // should use DEFUN_DLD.
  49.  
  50. #include <octave/config.h>
  51.  
  52. #include <iostream.h>
  53.  
  54. #include <octave/defun-dld.h>
  55. #include <octave/error.h>
  56. #include <octave/oct-obj.h>
  57. #include <octave/pager.h>
  58. #include <octave/symtab.h>
  59. #include <octave/variables.h>
  60.  
  61. // DEFUN_DLD and the macros that it depends on are defined in the
  62. // files defun-dld.h, defun.h, and defun-int.h.
  63.  
  64. // Note that the third parameter (nargout) is not used, so it is
  65. // omitted from the list of arguments to DEFUN_DLD in order to avoid
  66. // the warning from gcc about an unused function parameter. 
  67.  
  68. DEFUN_DLD (hello, args, ,
  69.   "[...] = hello (...)\n\
  70. \n\
  71. Print greeting followed by the values of all the arguments passed.\n\
  72. Returns all arguments in reverse order.")
  73. {
  74.   // The list of values to return.  See the declaration in oct-obj.h
  75.  
  76.   octave_value_list retval;
  77.  
  78.   // This stream is normally connected to the pager.
  79.  
  80.   octave_stdout << "Hello, world!\n";
  81.  
  82.   // The arguments to this function are available in args.
  83.  
  84.   int nargin = args.length ();
  85.  
  86.   // The octave_value_list class is a zero-based array of octave_value
  87.   // objects.  The declaration for the octave_value class is in the
  88.   // file pt-const.h.  The print() method will send its output to
  89.   // octave_stdout, so it will also end up going through the pager.
  90.  
  91.   for (int i = 0; i < nargin; i++)
  92.     {
  93.       octave_value tmp = args (i);
  94.       tmp.print ();
  95.       retval (nargin-i-1) = tmp;
  96.     }
  97.  
  98.   return retval;
  99. }
  100.